package dao;

import java.util.List;

import play.data.validation.Required;

import models.*;
import utils.exceptions.BDException;

public class FachadaDAO {

	private static FachadaDAO singleton = null;
	
	private FachadaDAO() {}

	public static FachadaDAO getInstance() {
		if (singleton == null) {
			singleton = new FachadaDAO();
		}
		return singleton;
	}

	public boolean cadastrarAluno(Aluno _aluno) throws BDException {
		boolean retorno = false;
		
		AlunoDAO alunoDAO = new AlunoDAO();
		
		
		retorno = alunoDAO.cadastrarAluno(_aluno);
		

		return retorno;
	}

	public boolean editarAluno(Aluno _aluno) throws BDException {
		boolean retorno = false;
		
		AlunoDAO alunoDAO = new AlunoDAO();
		
		retorno = alunoDAO.editar(_aluno);
		
		return retorno;
	}

	public List<Aluno> listarAlunos() throws BDException {
		AlunoDAO alunoDAO = new AlunoDAO();
		
		List<Aluno> alunos = alunoDAO.listarTodos();
		
		return alunos;
	}
	
	public List<Aluno> listarAlunosProf(long idAula) throws BDException {
		AlunoDAO alunoDAO = new AlunoDAO();
		
		List<Aluno> alunos = alunoDAO.listarTodosProf(idAula);
		
		return alunos;
	}

	public boolean excluirAluno(long _cpfAluno) throws BDException  {
		boolean retorno = false;
		
		AlunoDAO alunoDAO = new AlunoDAO();
		
		retorno = alunoDAO.excluir(_cpfAluno);
		
		return retorno;
	}
	
	public Aluno buscarAluno(long _cpf) throws BDException {		
		AlunoDAO alunoDAO = new AlunoDAO();
		
		Aluno retorno = alunoDAO.buscarAluno(_cpf);
		
		return retorno;
	}
	
	public Aluno buscarAlunoLogin(String login, String senha) throws BDException {
		AlunoDAO admDAO = new AlunoDAO();
		
		Aluno retorno = admDAO.buscarAlunoLogin(login, senha);
		
		return retorno;
	}
	
	//Aula
	
	public boolean cadastrarAula(Aula _aula) throws BDException {
		boolean retorno = false;
		
		AulaDAO aulaDAO = new AulaDAO();
		
		retorno = aulaDAO.cadastrar(_aula);

		return retorno;
	}

	public boolean editarAula(Aula _aula) throws BDException{
		boolean retorno = false;
		
		AulaDAO aulaDAO = new AulaDAO();
		
		retorno = aulaDAO.editar(_aula);

		return retorno;
	}
	
	public List<DisciplinaAula>listarAulaProf(long idProf){
		AulaDAO aulaDAO = new AulaDAO();
		
		List<DisciplinaAula> disciplinas = aulaDAO.listarTodosProf(idProf);
		
		return disciplinas;
	}

	public List<Aula> listarAulas() throws BDException{
	
		AulaDAO aulaDAO = new AulaDAO();
		
		List<Aula> aulas = aulaDAO.listarTodos();

		return aulas;
	}

	public boolean excluirAula(int idAula) throws BDException {
		boolean retorno = false;
		
		AulaDAO aulaDAO = new AulaDAO();
		
		retorno = aulaDAO.excluir(idAula);
		
		return retorno;
	}
	
	public Aula buscarAula(int idAula) throws BDException {
		Aula _aula;
		
		AulaDAO aulaDAO = new AulaDAO();
		
		_aula = aulaDAO.buscarAula(idAula);
		
		return _aula;
	}
	
	public List<Aula> buscarListaAula(String _codDisc) throws BDException {
		AulaDAO aulaDAO = new AulaDAO();
		
		List<Aula> aulas = aulaDAO.buscarListaAula(_codDisc);
		
		aulas = aulaDAO.buscarListaAula(_codDisc);
		
		return aulas;
	}
	
	//Disciplina
	
	public boolean cadastrarDisciplina(Disciplina disciplina) throws BDException {
		boolean retorno = false;
		
		DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
		
		retorno = disciplinaDAO.cadastrarDisciplina(disciplina);
		
		return retorno;	
	}

	public Disciplina buscarDisciplina(String codigo) throws BDException {
		DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
		
		Disciplina retorno = disciplinaDAO.buscarDisciplina(codigo);
		
		return retorno;
	}
	
	public boolean editarDisciplina(Disciplina _disciplina) throws BDException{
		boolean retorno = false;
		
		DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
		
		retorno = disciplinaDAO.editarDisciplina(_disciplina);
		
		return retorno;
	}	

	public List<Disciplina> listarDisciplinas() throws BDException{
		DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
		
		List<Disciplina> disciplinas = disciplinaDAO.listarTodos();
		
		return disciplinas;
	}

	public boolean excluirDisciplina(String codigo) throws BDException {
		boolean retorno = false;
		
		DisciplinaDAO disciplinaDAO = new DisciplinaDAO();
		
		retorno = disciplinaDAO.excluirDisciplina(codigo);
		
		return retorno;
	}
	
	//Professor
	
	public boolean cadastrarProfessor(Professor _professor) throws BDException {
		boolean retorno = false;
		
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		retorno = professorDAO.inserir(_professor);
		
		return retorno;
	}

	public boolean editarProfessor(Professor _professor) throws BDException{
		boolean retorno = false;
		
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		retorno = professorDAO.editar(_professor);

		return retorno;
	}

	public List<Professor> listarProfessores() throws BDException{
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		List<Professor> professores = professorDAO.listarTodos();
	
		return professores;
	}

	public boolean excluirProfessor(long _cpfProfessor) throws BDException {
		boolean retorno = false;
		
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		retorno = professorDAO.excluir(_cpfProfessor);
		
		return retorno;
	}
	
	public Professor buscarProfessor(long _cpf) throws BDException {
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		Professor retorno = professorDAO.buscarProfessor(_cpf);
		
		return retorno;
	}
	
	public Professor buscarProfessor(String professor) throws BDException {
		ProfessorDAO professorDAO = new ProfessorDAO();
		
		Professor retorno = professorDAO.buscarProfessor(professor);
		
		return retorno;
	}
	
	public Professor buscarProfessorLogin(String login, String senha) throws BDException {
		ProfessorDAO admDAO = new ProfessorDAO();
		
		Professor retorno = admDAO.buscarProfessorLogin(login, senha);
		
		return retorno;
	}
		
	//Veiculo
	
	public boolean inserirVeiculo(Veiculo _veiculo) throws BDException {		
		boolean retorno = false;		
		VeiculoDao veiculoDAO = new VeiculoDao();		
		retorno = veiculoDAO.inserirVeiculo(_veiculo);		
		return retorno;
	}
	
	public List<Veiculo> listarVeiculos()throws BDException{
		VeiculoDao veiculoDAO = new VeiculoDao();
		
		List<Veiculo> veiculos = veiculoDAO.listarTodos();
	
		return veiculos;
	}
	
	public Veiculo buscarVeiculo(String _placa) throws BDException {
		VeiculoDao veiculoDAO = new VeiculoDao();		
		Veiculo retorno  = veiculoDAO.buscarVeiculo(_placa);	
		return retorno;
	}
	
	public boolean excluirVeiculo(String _placaVeiculo) throws BDException {
		boolean retorno = false;
		
		VeiculoDao veiculoDAO = new VeiculoDao();
		
		retorno = veiculoDAO.excluir(_placaVeiculo);
		
		return retorno;
	}
	

	public boolean editarVeiculo(Veiculo _veiculo) throws BDException{
		boolean retorno = false;
		
		VeiculoDao veiculoDao = new VeiculoDao();
		
		retorno = veiculoDao.editarVeiculo(_veiculo);
		
		return retorno;
	}	
	

	//Turma	
	
	public Turma buscarTurma(String codigo) throws BDException {
		TurmaDAO turmaDAO = new TurmaDAO();
		
		Turma retorno = turmaDAO.buscarTurma(codigo);
		
		return retorno;
	}

	public boolean cadastrarTurma(Turma turma) throws BDException {
		boolean retorno = false;
		
		TurmaDAO turmaDAO = new TurmaDAO();
		
		retorno = turmaDAO.cadastrarTurma(turma);
		
		return retorno;	
	}
	
	public boolean cadastrarTurmaAula(TurmaAula turma) throws BDException {
		boolean retorno = false;
		
		TurmaDAO turmaDAO = new TurmaDAO();
		
		retorno = turmaDAO.cadastrarTurmaAula(turma);
		
		return retorno;	
	}

	public boolean excluirTurma(String valueOf) throws BDException {
		boolean retorno = false;
		
		TurmaDAO turmaDAO = new TurmaDAO();
		
		retorno = turmaDAO.excluirTurma(valueOf);
		
		return retorno;
	}

	public List<Turma> listarTurmas() throws BDException {
		TurmaDAO turmaDAO = new TurmaDAO();
		
		List<Turma> turmas = turmaDAO.listarTodos();
	
		return turmas;
	}

	public boolean editarTurma(Turma turma) throws BDException {
		boolean retorno = false;
		
		TurmaDAO turmaDAO = new TurmaDAO();
		
		retorno = turmaDAO.editarTurma(turma);
		
		return retorno;
	}
	
	//Administrador
	
	public boolean cadastrarAdm(Administrador adm) throws BDException {
		boolean retorno = false;
		
		AdministradorDAO admDAO = new AdministradorDAO();
		
		
		retorno = admDAO.cadastrar(adm);
		

		return retorno;
	}
	
	public boolean editarAdm(Administrador adm) throws BDException {
		boolean retorno = false;
		
		AdministradorDAO admDAO = new AdministradorDAO();
		
		retorno = admDAO.editar(adm);
		
		return retorno;
	}

	public List<Administrador> listarAdm() throws BDException {
		AdministradorDAO admDAO = new AdministradorDAO();
		
		List<Administrador> adms = admDAO.listarTodos();
		
		return adms;
	}

	public boolean excluirAdm(long cpf) throws BDException  {
		boolean retorno = false;
		
		AdministradorDAO admDAO = new AdministradorDAO();
		
		retorno = admDAO.excluir(cpf);
		
		return retorno;
	}
	
	public Administrador buscarAdm(long cpf) throws BDException {
		AdministradorDAO admDAO = new AdministradorDAO();
		
		Administrador retorno = admDAO.buscarAdm(cpf);
		
		return retorno;
	}
	
	public Administrador buscarAdmLogin(String login, String senha) throws BDException {
		AdministradorDAO admDAO = new AdministradorDAO();
		
		Administrador retorno = admDAO.buscarAdmLogin(login, senha);
		
		return retorno;
	}
}
